package 数据结构和算法入门计划8月开始;
// https://leetcode-cn.com/problems/symmetric-tree/
public class 树101对称二叉树0825 {

      public class TreeNode {
          int val;
          TreeNode left;
          TreeNode right;
          TreeNode() {}
          TreeNode(int val) { this.val = val; }
          TreeNode(int val, TreeNode left, TreeNode right) {
              this.val = val;
              this.left = left;
              this.right = right;
          }
      }

    class Solution {
        public boolean isSymmetric(TreeNode root) {
            if(root==null) {
                return true;
            }
            //调用递归函数，比较左节点，右节点
            return dfs(root.left,root.right);
        }

        boolean dfs(TreeNode left, TreeNode right) {
            //递归的终止条件是两个节点都为空
            //或者两个节点中有一个为空
            //或者两个节点的值不相等
            if(left==null && right==null) {
                return true;
            }
            if(left==null || right==null) {
                return false;
            }
            if(left.val!=right.val) {
                return false;
            }
            //再递归的比较 左节点的左孩子 和 右节点的右孩子
            //以及比较  左节点的右孩子 和 右节点的左孩子
            return dfs(left.left,right.right) && dfs(left.right,right.left);
        }
    }

}
